package _24_beiwanglu_pattern.v5_1_multiple_state;

/**
 * @Description: 5.1升级内容:
 *      有一天，突然有一个重要
 * 的系统说我数据库有点问题，请把上一个月末的数据拉出来恢复，那怎么办？对备份管理员
 * 来说，这很好办，直接根据时间戳找到这个备份，还原回去就成了，但是对于我们刚刚学习
 * 的备忘录模式却行不通，为什么呢？它对于一个确定的发起人，永远只有一份备份，在这种
 * 情况下，单一的备份就不能满足要求了，我们需要设计一套多备份的架构。
 * @Auther: 2019/6/9 0:54 by zhang.jy
 */
public class Client {
     public static void main(String[] args) {
             //定义出发起人
             Originator ori = new Originator();
             //定义出备忘录管理员
             Caretaker caretaker = new Caretaker();
             //初始化
             ori.setState1("中国");
             ori.setState2("强盛");
             ori.setState3("繁荣");
             System.out.println("===初始化状态===\n"+ori);
             //创建一个备忘录
             caretaker.setMemento("001",ori.createMemento());
             caretaker.setMemento("002",ori.createMemento());
             //修改状态值
             ori.setState1("软件");
             ori.setState2("架构");
             ori.setState3("优秀");
             System.out.println("\n===修改后状态===\n"+ori);
             //恢复一个备忘录
             ori.restoreMemento(caretaker.getMemento("001"));
             System.out.println("\n===恢复后状态===\n"+ori);

             Memento memento = caretaker.getMemento("001");
             //这里已经出现了封装了问题了...
             //它的方法不应该提供出来,可以参考6.0内容
             memento.setStateMap(null);
     }
}